import axios from 'axios'
//引入配置项文件
import serverConfig from './serverConfig'
//可以对post请求传参进行序列化处理
import qs from 'qs'

// 创建 axios 请求实例
const service = axios.create({
    // 基础请求地址
    baseURL: serverConfig.baseURL,
    // 请求超时设置
    timeout: 5000,
})
// 请求拦截器
service.interceptors.request.use(
    (config) => {
        // 是否使用token
        // const token = true
        if (serverConfig.useTokenAuthorization) {
            config.headers.Authorization = localStorage.getItem('token')
        }

        // 设置请求头
        if (!config.headers["Content-Type"]) { // 如果没有设置请求头
            if (config.method === 'post' || config.method === 'put') {
                config.headers["Content-Type"] = "application/x-www-form-urlencoded"; // post 请求
                config.data = qs.stringify(config.data); // 序列化,比如表单数据
                console.log(config.data);
            } else {
                config.headers["Content-Type"] = "application/json"; // 默认类型
            }
        }
        console.log("请求配置", config);
        return config
    },
    (error) => {
        Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(
    (res) => {
        return res
    },
    (error) => {
        let message = ''
        if (error && error.response) {
            switch (error.response.status) {
                case 302:
                    message = '接口重定向了！';
                    break;
                case 400:
                    message = '参数不正确！';
                    break;
                case 401:
                    message = '您未登录，或者登录已经超时，请先登录！';
                    break;
                case 403:
                    message = '您没有权限操作！';
                    break;
                case 404:
                    message = `请求地址出错：${error.response.config.url}`;
                    break;
                case 408:
                    message = '请求超时！';
                    break;
                case 409:
                    message = '系统已存在相同数据！';
                    break;
                case 500:
                    message = '服务器内部错误！';
                    break;
                case 501:
                    message = '服务未实现!';
                    break;
                case 502:
                    message = '网关错误！';
                    break;
                case 503:
                    message = '服务不可用！';
                    break;
                case 504:
                    message = '服务暂时无法访问，请稍后重试！'
                    break;
                case 505:
                    message = 'HTTP 版本不受支持！！'
                    break;
                default:
                    message = '异常问题，请联系管理员！'
                    break;
            }
        }
        return Promise.reject(message);
    }
)

export default service
